package testString;

public class Test {
    /**
     * String :由“”号引起来的一个或多个字符
     * 创建的两种方式：“hello”-->在方法区的串池 只有一个  和 new String() 在堆区会产生至多2个对象一个在堆区一个
     * 会检查串池，有no,否则创建一个,而且他两是不同的对象，空间位置不同
     * String 的底层是一个字符数组
     * 字符串获取长度:类名.length()底层是返回数组的长度
     * 字符串的下标访问：类名.charAt(index),index要合法否则会抛出下标越界异常
     * String中的equals()是不需要覆盖的是严格区分大小写，equalsIgnoreCase()是不区分大小写的
     * contains()当前字符串中是否包含另一个字符串，与 KMP相似
     * toCharArray()转换为字符数组
     * indexOf()是获取当前字符串中第一次出现的位置，没有返回-1与 KMP相似
     * toUpperCase()小 -》大  toLowerCase()大 -》小
     * endsWith()以...结尾 startsWith()以...开头
     * trim()去除前后空格 split()切割字符串
     * String是不可变长 StringBuilder()可变长
     *
     * */
    public static void main(String[] args) {
        String str1 = "hello";
        System.out.println(str1.length());
        System.out.println(str1.charAt(2));
        String str2 = new String("world");
        System.out.println(str1 == str2);

        String str3 = "world";
        String str4 = new String("hello");
        System.out.println(str1 == str4);

        String str5 = "hello";
        System.out.println(str5 == str1);
        System.out.println(str5.hashCode() == str1.hashCode());

        String str6 = "hello";
        for(int i = 0; i < str6.length(); i++){
            System.out.println(str6.charAt(i));
        }
    }
}
